/**
 * @file Bsp_AirFan.h
 * @author 徐松亮 (5387603@qq.com)
 * @version 1.0
 * @date 2023-09-26
 *
 * @copyright Copyright (c) {2030}  沈阳迈思医疗科技有限公司
 *
 * @brief 驱动层-->风扇驱动
 * @note (仅在h文件描述注释)
 * 	@verbatim
    1.适用芯片:
        STM32F407xx STM32H743
    2.移植步骤:
        2.1 按项目设定.h文件相关参数
        2.2 在100ms周期函数调用函数  BspAirFan_Cycle_100ms()
        2.3 在uctsk_Debug.h添加接口声明
    3.验证方法:
        3.1 在Debug环境加入调试指令，执行后循环打印数据，退出后关闭
    4.使用方法:无
    5.其他说明:
        STM32CubeMx初始化完成
    @endverbatim
 * @todo 目前只是框架形式上满足面向对象，实际不满足，需要优化
 * @par 修改日志:
 * <table>
 * <tr><th>日期   <th>版本 <th>作者  <th>描述
 * <tr><td>2023-09-26 <td>1.0     <td>徐松亮     <td>创建初始版本
 * </table>
 */
/* 防止重复编译 (Define to prevent recursive inclusion)------------------------*/
#ifndef __BSP_AIRFAN_H
#define __BSP_AIRFAN_H
/* 通用头部文件 (General Includes)---------------------------------------------*/
#include "Module_MemManager.h"
#include "Module_Count.h"
/* 公有类型定义 (Exported types)-----------------------------------------------*/
// todo:考虑是否不应存在fnp_DebugOnCallback、fnp_DebugOffCallback，而是给标志
// todo:考虑温度的采集是否应该与风机的控制分开。
typedef struct
{
    uint16_t us_AdcReference_MV;
    void (*fnp_OnOff)(uint8_t);
    void (*fnp_Da)(uint16_t);
    uint16_t (*fnp_GetTimCmt)(void);
    void (*fnp_SetTimCmt)(uint16_t);
    void (*fnp_DebugOnCallback)(void);
    void (*fnp_DebugOffCallback)(void);
    void (*fnp_DebugOutStr)(int8_t *);
} BSP_AIRFAN_T_INPUT;
typedef struct
{
    uint16_t us_Speed_Hz;
    uint16_t us_Read_Da;
    uint8_t uc_FanError;
    // 0-OK 1-断路 2-短路
    uint8_t uc_TempError;
    uint8_t uc_Read_Brake;
    void (*fnp_OnOff)(uint8_t);
    void (*fnp_Da)(uint16_t);
} BSP_AIRFAN_T_OUTPUT;
typedef struct
{
    void (*fnp_Cycle_1ms)(void *);
    void (*fnp_Cycle_100ms)(void *);
} BSP_AIRFAN_T_TRANSPLANT;
typedef struct
{
    uint8_t uc_FanErrTimer_100ms;
    uint16_t us_TestDa1;
    uint16_t us_TestDa2;
    //
    uint8_t uc_DebugTestEnable;
    uint8_t uc_DebugPrintEnable;
    uint16_t us_Timer_ms;
    uint16_t us_Timer_100ms;
    uint8_t uc_SelfCheckStep;
    uint8_t uc_SelfCheckCmt;
} BSP_AIRFAN_T_PRIVATE;
typedef struct
{
    BSP_AIRFAN_T_INPUT t_Input;
    BSP_AIRFAN_T_OUTPUT t_Output;
    BSP_AIRFAN_T_TRANSPLANT t_Transplant;
    BSP_AIRFAN_T_PRIVATE t_Private;
} BSP_AIRFAN_T_INTERFACE;
/* 移植性宏定义 (Transplant define)--------------------------------------------*/
/* 应用性宏定义 (Application define)-------------------------------------------*/
/* 公有常量声明 (Exported constants)-------------------------------------------*/
/* 公有变量声明 (Exported variables)-------------------------------------------*/
/* 公有函数声明 (Exported functions)-------------------------------------------*/
void BspAirFan_Init(BSP_AIRFAN_T_INTERFACE *_tp_interface);
void BspAirFan_Temp(BSP_AIRFAN_T_INTERFACE *_tp_interface, uint16_t _us_voltage_mv, uint16_t *_usp_res, int16_t *_sp_temp);
//
void BspAirFan_DebugTestOnOff(uint8_t _uc_trueOrFalse, void *_tp_interface);
void BspAirFan_TestOnOff(uint8_t _uc_trueOrFalse, void *_tp_interface, uint16_t _us_da);
#endif
/********************************END OF FILE***********************************/
